应用层协议原理
主要内容:
- 应用层概念:应用层协议、客户机与服务器、进程、套接字和运输层接口。
- 应用程序:Web、电子邮件、域名系统DNS及P2P对等文件共享。
- 开发网络应用程序的方法:套接字API编程
一、网络应用程序体系结构
应用程序体系结构:规定如何在各种端系统上组织引用,由研发者设计。
三种类型:
- 客户机/服务器
- 对等(P2P)
- 客户机/服务器与P2P的混合
客户机/服务器 体系结构
服务器:
- 总是打开
- 为多个客户机提供请求提供服务
- 永久的IP地址
- 可扩展为服务器场(主机群集)
客户机:
- 总是打开或间歇打开
- 向服务器发出请求
- 具有动态的IP地址
- 彼此之间不直接通信
如Web应用程序:总是打开的Web服务器为运行在客户机主机上的浏览器的请求提供服务(接收客户机请求,并发送响应结果)。
纯P2P 体系结构
- 无(最少)打开的服务器
- 任意端系统(对等方)可以直接通信
- 对等方间歇地连接,IP地址不固定
例:文件分发、因特网电话等
其特点为:可扩展度高、难以管理
未来P2P应用面临的三个主要挑战:
- ISP友好:受制于“非对称”宽带应用
- 安全性
- 激励
客户机/服务器与P2P的混合
Napster:MP3文件共享应用程序。
- P2P:对等方直接交换MP3文件
- 服务器注册/定位:
- 对等方在中心服务器上注册内容
- 对等方查询相同的中心服务器以定位内容
即时讯息:
- P2P:两个用户直接聊天
- 服务器检测/定位:
- 用户在线时,向中心服务器注册其IP地址
- 用户联系中心服务器以找到聊天伙伴的IP地址
二、进程通信
进程(process):在主机上运行的程序。
进程通信:
- 同一主机中两个进程间的通信:由操作系统控制;
- 不同主机中进程间的通信:通过网络交换报文进行。
- 发送进程:产生报文并向网络发送;
- 接收进程:接收报文,并回送报文。
客户机和服务器进程
网络应用程序由成对的进程组成,并通过网络相互发送报文
根据功能分别标示为客户机和服务器
- 客户机进程:发起通信的进程。
- 服务器进程:等待其他进程联系的进程。
例如:Web应用程序中,一个客户机浏览进程向某个Web服务器进程发起联系,交换报文。
又如:一个P2P文件共享系统中,文件从一个对等方的进程传输到另一个对等方中的进程。
P2P结构的应用程序也可分别看成是客户机进程或服务器进程。
对等方A(客户机)请求对等方B(服务器)发送某个文件。
套接字(socket)
套接字:同一台主机内应用层与运输层之间的接口。
也叫应用程序和网络之间的应用程序接口API,是在网络上建立网络应用程序的可编程接口。
进程与套接字关系
进程类似房子,套接字是进程的门。
进程通过套接字在网络上发送和接收报文。
- 发送进程:把报文推出门(套接字)
- 传送报文:通过下面网络把报文传送到目的进程门口。
- 接收进程:通过其门(套接字)接收报文。
应用程序开发者可以控制套接字应用层端的全部
对套接字的运输层端几乎不能控制(只能选择运输层协议、设定几个运输层参数等)。
应用程序开发者选择了一个运输层协议,则应用程序就建立在由该协议提供的运输层服务之上。如TCP协议。
进程寻址
主机上的进程可以有多个。
网络中有多个主机,每个主机上有多个进程
- 进程识别信息:表示哪台主机上的哪一个进程
源主机上的进程向目的主机上的进程发送报文时,应带有接收进程的识别信息(标识)。 - 进程寻址:根据进程识别信息找到相应进程。
进程识别信息(两部分)
- 主机名称或地址:网络中的哪一个主机
因特网中,用IP地址标识(32位/64位,全球唯一) - 进程的标识:主机中的哪一个进程
因特网中,采用端口号标识(port number)
常用的应用程序被指派固定的端口号
Web服务进程(HTTP协议):80
邮件服务进程(SMTP协议):25
创建一个新的网络应用程序时,必须分配一个新的端口号,不能重复
用户代理(user agent)
是用户与网络应用程序之间的接口。
如:
- Web应用的用户代理:是一些浏览器软件
一个通过套接字收发报文,并提供用户接口的进程 - 电子邮件应用程序用户代理:是“邮件阅读器”。
允许用户进行邮件的撰写和阅读
三、应用层协议
定义了运行在不同端系统上的应用程序进程间传递报文的格式和方法
具体内容:
- 各种报文类型及其语法:报文类型如请求报文和响应报文;报文中的各个字段及描述
- 字段的语义:字段包含信息的含义
- 时序:进程何时、如何发送报文及对报文进行响应的规则。
四、应用程序所需要的服务
应用程序间通信:由运输协议跨越网络将发送进程的报文传输到接收进程的门户
需要使用运输协议所提供的服务
运输协议有多种,提供的服务不同。
应用程序需要什么样的运输服务?
- 可靠的数据传输(无数据丢失)
- 数据不能丢失的应用:如文件传输、金融事务等。
- 能容忍数据丢失的应用:如多媒体应用。
- 带宽(数据传输率)
- 带宽敏感的应用:需要特定的带宽才能正常工作。
- 弹性应用:使用的带宽多或少影响不大。
- 定时(数据传输的时间限制)
- 交互式实时应用:对时间敏感,要求时延小,如,因特网电话、视频会议及多方游戏等。
- 非实时应用:时延无限制,时延低更好
- 安全性
因特网运输协议提供的服务
两个运输层协议:
- 用户数据报协议UDP
- 传输控制协议TCP
每个协议为调用它们的应用程序提供不同的服务模型。
在创建一个新的因特网应用时,要选择其中一个。
TCP服务
两个方面:
面向连接的服务
可靠的传输服务
面向连接的服务
三阶段
- 建立连接(握手过程):
客户机程序和服务器程序之间互相交换控制信息,在两个进程的套接字之间建立一个TCP连接 - 传输报文:
连接是全双工的,即连接双方的进程可以在此连接上同时进行报文收发。 - 拆除连接:
应用程序报文发送结束。
可靠的传输服务
通信进程可以无差错、按适当顺序交付发送的数据
没有数据丢失和重复
拥塞控制
当发送方和接收方之间的网络出现拥塞事,会抑制发送进程速率。
对整个网络有益
拥塞控制还会试图限制每个TCP链接,达到公平共享网络带宽的目的
未提供的服务
TCP和UPD都没有提供任何加密机制
安全套接字层(Secure Socket Layer, SSL)
- 属于应用层协议,位于应用层协议与TCP之间;
- 提供了加密、数据完整性、端点鉴别等功能,实现进程间安全通信
不确保最小传输速率:发送进程受拥塞控制机制制约;
不提供时延保证:数据传输等时间不确定。
TCP协议能保证交付所有的数据,但并不保证这些数据传输的速率以及期待的传输时延
UDP服务
提供最小服务模式运行
- 无连接:两个进程通信前没有握手
- 不可靠数据传输:不保证报文能够被接收,或收到的报文是乱序到达
- 没有拥塞控制机制:发送进程可以任何速率发送数据
- 不提供时延保证